package fr.efrei.musicpliz.service.impl;

import java.util.ArrayList;
import java.util.List;

import fr.efrei.musicpliz.dao.CompteDao;
import fr.efrei.musicpliz.dto.CompteDto;
import fr.efrei.musicpliz.entity.Compte;
import fr.efrei.musicpliz.service.CompteService;
import fr.efrei.musicpliz.util.DtoHelper;

public class CompteServiceImpl implements CompteService {

	private CompteDao compteDao;

	@Override
	public <T extends Compte> List<T> getAllComptes(T instance) {
		return compteDao.getAllComptes(instance);
	}

	@Override
	public CompteDto getCompteForEmail(String email) {
		return DtoHelper.getDtoForCompte(compteDao.getCompteForEmail(email));
	}
	
	public Compte getCompteForId(int id) {
		return compteDao.getCompteForId(id);
	}

	@Override
	public Compte saveCompte(CompteDto dto) {
		
		switch (dto.getType()) {
		case ARTISTE:
			return compteDao.save(DtoHelper.getArtisteForDto(dto));
		case GROUPE:
			return compteDao.save(DtoHelper.getGroupeForDto(dto));
		case CLIENT_PARTICULIER:
			return compteDao.save(DtoHelper.getClientParticulierForDto(dto));
		case CLIENT_PROFESSIONNEL:
			return compteDao.save(DtoHelper.getClientProfessionnelForDto(dto));
		}
		
		//TODO introduce Exceptions
		throw new RuntimeException("shouldn't have happened!");
	}

	public void setCompteDao(CompteDao compteDao) {
		this.compteDao = compteDao;
	}

	@Override
	public List<CompteDto> searchComptesForDto(CompteDto dto) {
		List<CompteDto> dtos = new ArrayList<CompteDto>();
		for(Compte cpt : compteDao.searchComptesForDto(dto)) {
			dtos.add(DtoHelper.getDtoForCompte(cpt));
		}
		return dtos;
	}

}
